/**
 * 创建人:  @author huangpeng    
 * 创建时间:  2022年09月02日 00:24
 * 项目名称:  webservice-test
 * 文件名称:  ServerServiceDemoImpl
 * 文件描述:  @Description: webservice-service实现类
 * 公司名称:  柠檬
 *
 * All rights Reserved, Designed By 柠檬 
 * @Copyright: 2022-2022
 *
 */
package com.hp.webservice.service.impl;

import com.hp.webservice.service.ServerServiceDemo;
import org.springframework.stereotype.Component;

import javax.jws.WebParam;
import javax.jws.WebService;

/**
 * 包名称：com.hp.webservice.service.impl
 * 类名称：ServerServiceDemoImpl
 * 类描述：webservice-service实现类
 * 创建人：@author huangpeng
 * 创建时间：2022年09月02日 00:24
 */
@Component
@WebService(name = "ServerServiceDemo", targetNamespace = "http://server.webservice.example.com",
        endpointInterface = "com.hp.webservice.service.ServerServiceDemo")
public class ServerServiceDemoImpl implements ServerServiceDemo{

    /**
     * WebService涉及到的有这些 "四解三类 ", 即四个注解，三个类
     * @WebMethod
     * @WebService
     * @WebResult
     * @WebParam
     * SpringBus
     * Endpoint
     * EndpointImpl
     *
     * 一般我们都会写一个接口，然后再写一个实现接口的实现类，但是这不是强制性的
     * @WebService 注解表明是一个webservice服务。
     *      name：对外发布的服务名, 对应于<wsdl:portType name="ServerServiceDemo"></wsdl:portType>
     *      targetNamespace：命名空间,一般是接口的包名倒序, 实现类与接口类的这个配置一定要一致这种错误
     *              Exception in thread "main" org.apache.cxf.common.i18n.UncheckedException: No operation was found with the name xxxx
     *              对应于targetNamespace="http://server.webservice.example.com"
     *      endpointInterface：服务接口全路径（如果是没有接口，直接写实现类的，该属性不用配置）, 指定做SEI（Service EndPoint Interface）服务端点接口
     *      serviceName：对应于<wsdl:service name="ServerServiceDemoImplService"></wsdl:service>
     *      portName：对应于<wsdl:port binding="tns:ServerServiceDemoImplServiceSoapBinding" name="ServerServiceDemoPort"></wsdl:port>
     *
     * @WebMethod 表示暴露的服务方法, 这里有接口ServerServiceDemo存在，在接口方法已加上@WebMethod, 所以在实现类中不用再加上，否则就要加上
     *      operationName: 接口的方法名
     *      action: 没发现又什么用处
     *      exclude: 默认是false, 用于阻止将某一继承方法公开为web服务
     *
     * @WebResult 表示方法的返回值
     *      name：返回值的名称
     *      partName：
     *      targetNamespace:
     *      header: 默认是false, 是否将参数放到头信息中，用于保护参数，默认在body中
     *
     * @WebParam
     *       name：接口的参数
     *       partName：
     *       targetNamespace:
     *       header: 默认是false, 是否将参数放到头信息中，用于保护参数，默认在body中
     *       model：WebParam.Mode.IN/OUT/INOUT
     */

    @Override
    public String emrService(@WebParam String data) {
        if(null == data || "".equals(data.trim())){
            return "传入的参数为空";
        }
        return "调用成功, 参数为：" + data;
    }
}
